package 面试经典150题.区间;

import java.util.Arrays;

/**
 * @author tmh
 * @date 2024/4/12 20:31
 * @description
 */
public class T56合并区间 {
    public int[][] merge(int[][] intervals) {
        //排序intervals数组
        Arrays.sort(intervals, (x, y) -> x[0] - y[0]);
        //获取数组的长度
        int length = intervals.length;
        //初始化一个新数组
        int[][] merge = new int[length][2];
        //index记录新数组里面最后一个元素的下标
        int index = 0;
        //给新数组里面的第一个元素赋值
        merge[0] = intervals[0];
        //遍历intervals数组
        for (int i = 1; i < intervals.length; i++) {
            //判断第二个元素的第一个值是否大于第一个元素的第2个值 ，如果大于，就直接吧这个元素放在merge里面
            if (intervals[i][0] > merge[index][1]) {
                merge[++index] = intervals[i];
            } else {
                //如果不大于 这里要获取两个右端点的最大值作为合并后的右端点，
                //因为左端点排序之后你不知道右端点到底是大是小的。
                merge[index][1] = Math.max(intervals[i][1], merge[index][1]);
            }
        }
        return Arrays.copyOf(merge, index + 1);
    }
}
